package org.hzz.promotions.domain.service;

import io.gitee.pkmer.convention.page.PageResponse;
import io.gitee.pkmer.convention.page.query.PageQuery;
import io.gitee.pkmer.ddd.shared.service.DomainService;
import org.hzz.promotions.domain.entity.CouponEntity;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Map;

/**
 * @author <a href="mailto:1193094618@qq.com">pkmer</a>
 * <br>
 * <a href = "https://gitee.com/pkmer/sonatype-central-publisher">Code Repository</a>
 * At 2024/8/29
 * 优惠券领域服务
 */
public interface CouponDomainService extends DomainService {

    /**
     * 创建优惠券
     * @param coupon 优惠券实体
     */
    void insertCoupon(CouponEntity coupon);

    /**
     * 更新优惠券
     * @param entity 优惠券实体
     */
    void updateCouponEntity(CouponEntity entity);

    /**
     * 批量更新优惠券
     * @param entities 优惠券实体
     */
    void batchUpdateCouponEntity(List<CouponEntity> entities);

    /**
     * 查询优惠券
     * @param id 优惠券id
     * @return 优惠券
     */
    CouponEntity getCouponEntity(Long id);

    /**
     * 分页查询优惠券
     * @param pageQuery 分页查询
     * @return 分页结果
     */

    PageResponse<CouponEntity> pageQueryCoupon(PageQuery pageQuery);

    /**
     * 发放优惠券
     * @param couponEntity 优惠券
     */
    void beginIssue(CouponEntity couponEntity);

    /**
     * 暂停发放优惠券
     * @param id 优惠券id
     */
    void pauseCoupon(Long id);

    /**
     * 删除优惠券
     * @param id 优惠券id
     */
    @Transactional
    void deleteCoupon(Long id);


    /**
     * 增加优惠券的发放数量 + 1
     * @param id 优惠券id
     */
    void incrementIssueNum(long id);


    /**
     * 根据id获取优惠券
     * @param ids id列表
     * @return 优惠券实体列表
     */
    List<CouponEntity> getCouponEntityByIds(List<Long> ids);


    Map<Long,CouponEntity>  getCouponEntityMapById(List<Long> ids);
}
